import { userApi } from '../api/index.js';

/**
 * 检查登录状态
 * @param {Boolean} redirect - 是否在未登录时重定向到登录页
 * @returns {Promise<Boolean>} - 是否已登录
 */
export const checkLogin = async (redirect = true) => {
    try {
        // 检查本地access_token
        const access_token = uni.getStorageSync('access_token');
        if (!access_token) {
            if (redirect) {
                navigateToLogin();
            }
            return false;
        }
        
        try {
            // 校验access_token有效性（通过获取用户信息）
            const res = await userApi.getUserInfo();
            
            // 更新本地用户信息
            if (res && res.data) {
                uni.setStorageSync('userInfo', res.data);
            }

            console.log('检查当前用户角色:', res.data.role);
            if (res && res.data && res.data.role === 'none') {
                if (redirect) {
                    navigateToLogin();
                }
                return false;
            }
            
            return true;
        } catch (error) {
            console.error('校验登录状态失败', error);
            
            // access_token无效，清除并跳转登录
            if (redirect) {
                uni.removeStorageSync('access_token');
                uni.removeStorageSync('userInfo');
                navigateToLogin();
            }
            
            return false;
        }
    } catch (e) {
        console.error('checkLogin发生异常', e);
        return false;
    }
};

/**
 * 跳转到登录页
 */
export const navigateToLogin = () => {
    try {
        // 获取当前页面路径用于登录后跳回
        const pages = getCurrentPages();
        if (!pages || pages.length === 0) {
            // 没有页面栈，直接跳转到登录页
            uni.navigateTo({
                url: '/pages/user/login',
                fail: () => {
                    // 如果navigateTo失败，尝试reLaunch
                    uni.reLaunch({
                        url: '/pages/user/login'
                    });
                }
            });
            return;
        }
        
        const currentPage = pages[pages.length - 1];
        
        // 如果当前已经在登录页，则不再跳转
        if (!currentPage || !currentPage.route || currentPage.route === 'pages/user/login') {
            return;
        }
        
        const url = `/${currentPage.route}`;
        
        // 检查是否为tabBar页面
        const tabBarPages = [
            'pages/list/list',
            'pages/cart/cart',
            'pages/user/user'
        ];
        
        if (tabBarPages.includes(currentPage.route)) {
            uni.navigateTo({
                url: '/pages/user/login',
                fail: () => {
                    // 导航失败时的备用方案
                    uni.reLaunch({
                        url: '/pages/user/login'
                    });
                }
            });
        } else {
            // 普通页面，带上重定向参数
            const redirect = encodeURIComponent(url);
            uni.navigateTo({
                url: `/pages/user/login?redirect=${redirect}`,
                fail: () => {
                    // 导航失败时的备用方案
                    uni.reLaunch({
                        url: '/pages/user/login'
                    });
                }
            });
        }
    } catch (e) {
        console.error('导航到登录页失败', e);
        // 兜底方案：重启到登录页
        uni.reLaunch({
            url: '/pages/user/login'
        });
    }
};

/**
 * 登出
 */
export const logout = () => {
    try {
        uni.removeStorageSync('access_token');
        uni.removeStorageSync('userInfo');
        
        uni.showToast({
            title: '已退出登录',
            icon: 'success',
            success: () => {
                setTimeout(() => {
                    uni.reLaunch({
                        url: '/pages/user/login'
                    });
                }, 1500);
            },
            fail: () => {
                // 即使toast失败也要跳转
                setTimeout(() => {
                    uni.reLaunch({
                        url: '/pages/user/login'
                    });
                }, 1500);
            }
        });
    } catch (e) {
        console.error('登出过程发生错误', e);
        // 确保无论如何都能返回登录页
        setTimeout(() => {
            uni.reLaunch({
                url: '/pages/user/login'
            });
        }, 1500);
    }
};

export default {
    checkLogin,
    navigateToLogin,
    logout
}; 